
#ifndef _BSP_UART_H
#define _BSP_UART_H

#include <stdint.h>
/*****************only for HWT101**************************/
/* 串口2作为HWT101读取就使能这个 */
#include "wit_c_sdk.h"
#define HWT101_ON		1  // 使用HWT101跟其他串口的数据解析方式有些不同，使用uart2收发，使用时该位使能即可
#if HWT101_ON
	extern uint8_t ucTemp; // 专门用于接收HWT101数据
	struct HWT101_Device {
		// 通讯中断与任务(线程间通讯)双缓冲区实现
		volatile uint8_t Flag_UART_RX_OK; // 接收成功
		volatile float *activeBuffer; // 当前中断写入
		volatile float *taskBuffer; // 当前任务读取
		volatile uint8_t clear_ok; // 发送完成陀螺仪清零
	};
	extern struct HWT101_Device hwt101;
#endif
/**********************************************************/

/*****************only for rk 3588*********************/	
/* 串口读取rk3588就使能这个 */
#define RK3588_ON		1	
#if RK3588_ON
	#include "cmsis_os2.h"
	typedef struct
	{
		uint16_t image_x, image_y;
		uint8_t kind;
	} RK3588_Message_t;
	extern uint8_t RK3588_Data[8];
	struct RK3588_Device {
		volatile uint8_t Flag_UART_RX_OK; // 接收成功
		volatile uint16_t *activeBuffer; // 当前中断写入
		volatile uint16_t *taskBuffer; // 当前任务读取
	};	
	extern struct RK3588_Device rk3588;
#endif
/**********************************************************/
	
/* 接收数组的长度 */
#define UART_RX_QUEUE_LEN 100
#define U1_RX_LEN UART_RX_QUEUE_LEN
struct UART_Device {
    char *name;
		uint8_t Uart_Num; // 串口号
    int (*Init)(struct UART_Device *pDev, int baud, int datas, char parity, int stop, uint8_t size);
    int (*Send)(struct UART_Device *pDev, uint8_t *datas, int len, int timeout_ms);
    int (*Recv)(struct UART_Device *pDev, uint8_t *data, int timeout_ms);
    void *priv_data;
};
struct UART_Device *GetUARTDevice(char *name);


#endif


